package com.androidmvp.dreammvp.simple7;

import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.androidmvp.R;
import com.androidmvp.dreammvp.simple5.MainPresenter_5;
import com.androidmvp.dreammvp.simple5.MainView_5;
import com.androidmvp.dreammvp.simple5.base.BaseActivity_5;
import com.androidmvp.dreammvp.simple7.base.MvpActivity_7;
import com.androidmvp.local.table.WeatherInfo;
import com.androidmvp.local.table.WeatherinfoEntity;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivityTestMvp_7 extends MvpActivity_7<MainView_7,MainPresenter_7> implements MainView_7 {

    @BindView(R.id.tv_displayWeather)
    TextView tv;
    @BindView(R.id.progressBar)
    ProgressBar progressBar;
    @BindView(R.id.display_weather)
    Button displayWeather;

    //public MainPresenter_7 myPresenter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        listener();

    }

    //2、MVP设计->第二步->优化代码-优化第1步
    //分析问题：团队开发（存在问题：多人开发、模块化、迭代）
    //解决方案：MVP设计（UI层和M层进行分离）
    //解决P层和V层直接关联->接口回调
//    private void listener(){
//        myPresenter = new MainPresenter_1(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }

    //3、MVP设计->优化代码-优化第2步
    //分析问题：UI层和M层解除绑定
    //解决方案：绑定UI和解除绑定UI->方法绑定(attachView、detachView)
//    private void listener(){
//        myPresenter = new MainPresenter_2(this);
//        myPresenter.attachView(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        myPresenter.detachView();
//    }

    //4、MVP设计->优化代码-优化第3步
    //分析问题：其实这个绑定方式，那么你是一个presneter还好，如果多个presenter？很多冗余代码？
    //解决方案：抽象为父类->封装
//    private void listener(){
//        myPresenter = new MainPresenter_3(this);
//        myPresenter.attachView(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        myPresenter.detachView();
//    }

    //5、MVP设计->优化代码-优化第4步
    //分析问题：父类是不是写死了(LoginView)，假设有很多模块，多个View层，那么父类就行不通
    //解决方案：泛型设计
    //测试
//    private void listener(){
//        myPresenter = new MainPresenter_4(this);
//        myPresenter.attachView(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        myPresenter.detachView();
//    }

    //6、MVP设计->优化代码-优化第5步
    //分析问题：如果注意，你会发现activity里面需要不断重复的绑定和解除绑定（50个类，100类），代码冗余太多了
    //解决方案：泛型设计+抽象类(动态指定类型)
//    private void listener(){
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                getPresenter().getData();
//            }
//        });
//    }

    //第二步：MVP进阶设计？
    //1、MVP设计->优化代码-优化第1步
    //分析问题：扩展功能功能时候，有问题了（例如：实现Fragment、LinearLayout等等...）
    //发现问题：扩展功能，代码冗余（扩展MVP实现，发现了很多冗余代码，例如：Activity、Fragment、Button、LinearLayout等等..）
    //双重代理模式+动态代理
    //第一重代理：分析角色?->核心代理->MVP绑定和解除绑定(P层和V层关联等等...相关逻辑处理)
    //分析代理模式？
    //Dream老师买iphone 8（据说：8000），我叫深圳一个朋友（代理商）帮我代购，然后寄给我。
    //角色一：目标接口->买手动作（抽象）
    //角色二：目标对象->我(Dream老师)
    //角色三：代理对象->朋友(代理商)
    //分析绑定和解绑操作代理角色？
    //角色一：目标接口->抽象解绑和绑定(MvpCallback)
    //角色二：目标对象->具体实现MvpActivity、MvpFragment、MvpLinearLayout(BaseActivity)->具体实现类
    //角色三：代理对象->ProxyMvpCallback(具体一些实现)

    //第二重代理：分析角色?->核心代理->代理各个模块的生命周期（目的：为了给绑定和解除绑定提供一个公共环境（抽象））
    //角色一：目标接口->Activity生命周期抽象(MvpActivityDelegate: onCreate、onStart、onStop等等...)
    //角色二：目标对象->具体的实现(MvpActivityDelegateImpl: 实现类)
    //角色三：代理对象->MvpActivity(代理对象)
    private void listener(){
        displayWeather.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getPresenter().getData();
            }
        });
    }

    //必须写，不写会报错
    @Override
    public MainPresenter_7 createPresenter() {
        return new MainPresenter_7();
    }

    @Override
    public MainView_7 createView() {
        return this;
    }

    @Override
    public void showData(WeatherInfo mybean) {
        if(mybean==null){
            tv.setText("请求失败");
        }
        else{
            WeatherinfoEntity bean = mybean.getWeatherinfo();
            String city=bean.getCity();
            String wd=bean.getWD();
            String ws=bean.getWS();
            String time=bean.getTime();
            String data="城市:"+city+"\n风向:"+wd+"\n风级:"+ws+"\n发布时间:"+time;
            tv.setText(data);
        }
        hideProgressBar();
    }

    @Override
    public void showProgressBar() {
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideProgressBar() {
        progressBar.setVisibility(View.GONE);
    }
}
